package com.carrental.finance.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carrental.finance.dto.PaymentDTO;
import com.carrental.finance.entity.Payment;
import com.carrental.finance.vo.PaymentVO;

/**
 * 支付服务接口
 */
public interface PaymentService extends IService<Payment> {

    /**
     * 创建支付记录
     *
     * @param paymentDTO 支付DTO
     * @return 支付ID
     */
    Long createPayment(PaymentDTO paymentDTO);

    /**
     * 根据ID获取支付详情
     *
     * @param id 支付ID
     * @return 支付VO
     */
    PaymentVO getPaymentById(Long id);

    /**
     * 根据支付单号获取支付详情
     *
     * @param paymentNo 支付单号
     * @return 支付VO
     */
    PaymentVO getPaymentByPaymentNo(String paymentNo);

    /**
     * 根据订单ID获取支付详情列表
     *
     * @param orderId 订单ID
     * @return 支付VO列表
     */
    Page<PaymentVO> getPaymentsByOrderId(Long orderId, Page<Payment> page);

    /**
     * 根据用户ID分页查询支付记录
     *
     * @param userId 用户ID
     * @param page   分页参数
     * @return 支付VO分页
     */
    Page<PaymentVO> pageUserPayments(Long userId, Page<Payment> page);

    /**
     * 分页查询支付记录
     *
     * @param page        分页参数
     * @param paymentNo   支付单号
     * @param orderNo     订单号
     * @param userId      用户ID
     * @param paymentType 支付类型
     * @param status      支付状态
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @return 支付VO分页
     */
    Page<PaymentVO> pagePayments(Page<Payment> page, String paymentNo, String orderNo, Long userId, Integer paymentType, Integer status, String startTime, String endTime);

    /**
     * 处理支付回调
     *
     * @param paymentNo     支付单号
     * @param transactionId 交易流水号
     * @param status        支付状态
     * @return 是否成功
     */
    boolean handlePaymentCallback(String paymentNo, String transactionId, Integer status);

    /**
     * 取消支付
     *
     * @param id 支付ID
     * @return 是否成功
     */
    boolean cancelPayment(Long id);
} 